// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef NET_WEBSOCKETS_WEBSOCKET_ERRORS_H_
#define NET_WEBSOCKETS_WEBSOCKET_ERRORS_H_

#include "net/base/net_errors.h"

namespace net {

// Reason codes used with close messages. NoStatusReceived,
// AbnormalClosure and TlsHandshake are special in that they
// should never be sent on the wire; they are only used within the
// implementation.
enum WebSocketError {
    // Status codes in the range 0 to 999 are not used.

    // The following are defined by RFC6455.
    kWebSocketNormalClosure = 1000,
    kWebSocketErrorGoingAway = 1001,
    kWebSocketErrorProtocolError = 1002,
    kWebSocketErrorUnsupportedData = 1003,
    kWebSocketErrorNoStatusReceived = 1005,
    kWebSocketErrorAbnormalClosure = 1006,
    kWebSocketErrorInvalidFramePayloadData = 1007,
    kWebSocketErrorPolicyViolation = 1008,
    kWebSocketErrorMessageTooBig = 1009,
    kWebSocketErrorMandatoryExtension = 1010,
    kWebSocketErrorInternalServerError = 1011,
    kWebSocketErrorTlsHandshake = 1015,

    // The range 1000-2999 is reserved by RFC6455 for use by the WebSocket
    // protocol and public extensions.
    kWebSocketErrorProtocolReservedMax = 2999,

    // The range 3000-3999 is reserved by RFC6455 for registered use by libraries,
    // frameworks and applications.
    kWebSocketErrorRegisteredReservedMin = 3000,
    kWebSocketErrorRegisteredReservedMax = 3999,

    // The range 4000-4999 is reserved by RFC6455 for private use by prior
    // agreement of the endpoints.
    kWebSocketErrorPrivateReservedMin = 4000,
    kWebSocketErrorPrivateReservedMax = 4999,
};

// Convert WebSocketError to net::Error defined in net/base/net_errors.h.
NET_EXPORT_PRIVATE Error WebSocketErrorToNetError(WebSocketError error);

} // namespace net

#endif // NET_WEBSOCKETS_WEBSOCKET_ERRORS_H_
